package sad.controle;

import sad.util.Constantes;
import java.awt.event.ActionEvent;
import java.awt.event.WindowEvent;
import sad.dao.DisciplinaTableDAO;
import sad.util.DAOEvent;
import sad.visao.DialogAbstrato;
import sad.visao.FabricaDeDialog;
import sad.visao.ListDiscDialog;

public class RelatorioDiscControle extends AbstractControl{

  private ListDiscDialog v_rel_disc;

  public RelatorioDiscControle(DialogAbstrato v) {
    this.v_rel_disc = (ListDiscDialog) v;
    addOuvinte();
    refreshRelatorio();
    v_rel_disc.setModal(true);
    v_rel_disc.setVisible(true);
  }
  
// <editor-fold defaultstate="collapsed" desc="Responde a eventos com origem nas visões">
    @Override
    public void actionPerformed(ActionEvent e) {
        Integer lineIndex = (Integer) v_rel_disc.getSelectedDisciplina()[3];
        if(e.getActionCommand().equals(Constantes.NOVO_RELATORIO)){
            v_rel_disc.resetMessage();
            FabricaDeDialog.criarDialog(null, "Disciplina",null);
        }
        if(e.getActionCommand().equals(Constantes.EDITAR_PROFESSOR)){
            v_rel_disc.resetMessage();
            if(lineIndex==null){
                DisciplinaTableDAO.getInstance().erroField("vazio", "Disciplina");
            }else{
                Object[] editable = v_rel_disc.getSelectedDisciplina();
                DisciplinaTableDAO.getInstance().setIndexDisc(lineIndex);
                FabricaDeDialog.criarDialog(null, "Disciplina", editable);
            }
        }
        if(e.getActionCommand().equals(Constantes.CANCELAR_RELATORIO)){
            DisciplinaTableDAO.getInstance().removeDAOOuvinte(this);
            v_rel_disc.close();
        }
        if(e.getActionCommand().equals(Constantes.EXCLUIR)){
            //verifica se existe uma linha selecionada, se sim, remove o professor dessa linha
            if(lineIndex==null){
                DisciplinaTableDAO.getInstance().erroField("vazio", "Disciplina");
            }else{
                DisciplinaTableDAO.getInstance().removeDisciplina();
                //seleciona o professor anterior ao apagado
                lineIndex = (lineIndex < 0) ? 0 : lineIndex-1;
                if (lineIndex >= 0) {
                    v_rel_disc.setSelectedRow(lineIndex);
                } 
            }        
        }
    }

    @Override
    public void windowClosing(WindowEvent e){
        switch(e.getID()){
           case WindowEvent.WINDOW_CLOSING:
                DisciplinaTableDAO.getInstance().removeDAOOuvinte(this);
                v_rel_disc.close();
                break;
        }
    }// </editor-fold>

// <editor-fold defaultstate="collapsed" desc="Enchaminha eventos com origem no DAO">
    @Override
    public void daoChange(DAOEvent e) {
        v_rel_disc.modelDAOChange(e);
    }// </editor-fold>

// <editor-fold defaultstate="collapsed" desc="Métodos privados comuns aos Relatórios">    
    private void addOuvinte() {
        v_rel_disc.addActionListener(this);
        v_rel_disc.addWindowOuvinte(this);
        DisciplinaTableDAO.getInstance().addDAOOuvinte(this);
    }

    private void refreshRelatorio() {
        DisciplinaTableDAO.createTableDisc();
        v_rel_disc.setTblDisc(
                DisciplinaTableDAO.getInstance().getTableDisciplina());
    }// </editor-fold>
}
